Извлечение кода "из прошлого" (как оно раньше работало?)
Поиск ошибок сравнением (кто это сделал?)
Централизованное хранение
Актуальное и используемое всеми участниками (где последняя версия?!)
Защищенное, с разграничением прав доступа
Машина времени и сетевое хранилище в одном флаконе!
Нужны ли специальные инструменты? Вспоминаем Sharepoint, tarballs.
Системы контроля версий
Системы контроля версий — это программные системы, хранящие несколько версий одного документа, и позволяющие вернуться к более ранним версиям. Как правило, для каждого изменения запоминается дата модификации и автор.
Патчи
Патч (англ. patch — заплатка) — информация, предназначенная для автоматизированного внесения определённых изменений в компьютерные файлы.
To work on something new, create a descriptively named branch off of master (ie: new-oauth2-scopes).
Develop in branch
Commit to that branch locally and regularly push your work to the same named branch on the server.
Open a pull request (ask for review)
When you need feedback or help, or you think the branch is ready for merging, open a pull request.
Merge after review
After someone else has reviewed and signed off on the feature, you can merge it into master.
Deploy
Once it is merged and pushed to master, you can and should deploy immediately.
GitHub Flow в командах Git
# Check that origin and upstream repositories are correctly defined
$ git remote -v
# Get the latest sources from the upstream repository
$ git remote update
# Checkout a new topic branch for development
$ git checkout -b adding-new-feature upstream/master
## Do some development...## Check your changes
$ git status
# Commit your changes
$ git commit -a -m "Added a new feature"# Push your changes to the origin
$ git push origin HEAD
Базовые принципы
Приложение строится только на на основе известного состояния репозитория:
Не только релизы, но и экспериментальные и тестовые сборки (builds).
В идеале приложение умеет сообщать свою ревизию и параметры сборки.
Стабильность общих (публичных) веток:
Они обязаны компилироваться и проходить все тесты в любой момент времени.
Изменения тестируются до попадания в репозиторий.
Если дефектные изменения прошли, они исправляются в срочном порядке.
Абсолютно вся разработка фиксируется в истории:
Это делается в виде отдельных веток локального или глобального репозитория.
"Удачные" изменения добавляются в основную ветвь.
Публичная история проекта не "переписывается":
Однажды помеченные тэгами и выпущенные релизы модификации не подлежат.
Промежуточная история не переписывается, потому что будут конфликты.
Современное состояние
Использование в ИТ-проектах:
Фундаментальный инструмент разработки
Также используется для: файлы конфигурации, документация, тестовые данные и пр.